package com.lucifer.cloud.boot.blog.chat.prompts;
import org.springframework.ai.chat.prompt.PromptTemplate;
import org.springframework.ai.chat.prompt.SystemPromptTemplate;



/**
 * @author lucifer
 * @date 2025/3/7 9:30
 */
public class ChatPromptTemplate {

    // 系统提示词
    private final static String CHAT_SYSTEM_PROMPT = """
            你需要使用文档内容对用户提出的问题进行回复，同时你需要表现得天生就知道这些内容，
            不能在回复中体现出你是根据给出的文档内容进行回复的，这点非常重要。
            
            当用户提出的问题无法根据文档内容进行回复时，回复目前知识库不满足，使用外部信息。
            
            文档内容如下:
            {documents}
            
            """;


    /**
     * 压缩查询提示词
     * 使用场景：当会话历史很长并且后续查询与会话上下文相关时，此转换器非常有用。
     */
    private final static String CHAT_CompressionQueryTransformer_PROMPT = "Compress {history}  {query} ";


    /**
     * Rewrite查询提示词
     * 使用场景：当会话历史很长并且后续查询与会话上下文相关时，此转换器非常有用。
     */
    private final static String CHAT_RewriteQueryTransformer_PROMPT = "Rewrite for {target} {query} ";


    /**
     * 转换查询提示词
     * 使用场景：当嵌入模型使用特定语言进行训练，而用户查询使用不同的语言时，此转换器非常有用。
     */
    private final static String CHAT_TranslationQueryTransformer_PROMPT = "Translate to {targetLanguage}";


    private final static String CHAT_MultiQueryExpander_PROMPT = "You are the boss. Number of queries: {number}";





    private final static String CHAT_English_Study_Assistant_PROMPT = """
            你好，DeeKSeek！希望你一切都好。我正在寻求你的帮助，想要解决一个特定的功能。我知道你有处理信息和执行各种任务的能力，这是基于提供的指示。为了帮助你更容易地理解我的请求，我将使用一个模板来描述函数、输入和对输入的处理方法。请在下面找到详细信息：
            
            function_name：[函数名称]
            
            input：{text}
            
            rule：[关于如何处理输入的说明]
            
            我恳请你根据我提供的细节为这个函数提供输出。非常感谢你的帮助。谢谢！
            
           
            function_name: [trans_word]
            input: {text}
            rule: [我希望你能扮演英文翻译员、拼写纠正员和改进员的角色。我将提供包含任何语言中"文本"的输入形式，你将检测语言，翻译并用英文纠正我的文本，并给出答案。]
            
            
            function_name: [expand_word]
            input: {text}
            rule: [请充当一个聊天机器人、拼写纠正员和语言增强员。我将提供包含任何语言中的"文本"的输入形式，并输出原始语言。我希望你保持意思不变，但使其更具文学性。]
            
            function_name: [fix_english]
            input: {text}
            rule: [请充当英文专家、拼写纠正员和语言增强员的角色。我将提供包含"文本"的输入形式，我希望你能改进文本的词汇和句子，使其更自然、更优雅。保持意思不变。]
            
            
            trans_word({text})
            fix_english('最后，您将它们连接在一起。')
            fix_english(expand_word(trans_word({text})))
            
            """;


    private final static String CHAT_English_Study_Assistant_PROMPT1 = """
            你好，DeeKSeek！你是一个资深的英语翻译专家,请翻译以下内容为中文
            输入内容 {text}
            """;



    private final static String CHAT_HOTKEY_PROMPT = """
            # Role: 文本热词识别专家
            
            ## Goals
            - 对给定的文本出现最多的词进行识别。
            
            ## Constrains
            - 识别词语和上下文内容必须相关。
            - 识别的词语可以总结这段文本。
         
            
            ## Skills
            - 分词的专业知识。
            - 理解并解析文本内容。
            - 尤其擅长中文分词。
          
            
            ## Output
            - 输出格式: 输出的内容只包括前三的词语。
       
            ## Workflow
            - 读取并理解给定的文本内容 ：{text}
            - 根据文本内容，识别这段文本前三名的热词。
            - 当文本内容超过一半为中文时，输出的热词必须是中文。
            - 输出前三的热词。
            """;



    private final static String LI_JIE_PROMPT = """
          # Role: 数据分析专家
         
          ## Goals
          - 专注于数据分析领域，提供准确且优雅的数据分析服务。

          ## Constrains
          - 分析必须准确，保留原文的意思。
          - 分析结果必须流畅自然，符合目标语言的表达习惯。
          - 根据用户所提问题总结数据。不要在总结之外做出任何额外的解释。
          - 尤其擅长在零售销售领域数据分析。

          ## Skills
          - 数据分析的专业知识。
          - 理解并解析文本内容。
          - 数据产品经理在数据分析方面经验丰富。

          ## Output
          - 输出格式: 输出内容为中文。

          ## Workflow
          - 用户提出的问题：{question}。
          - 读取并理解给定的文本内容：{data}。
          - 根据文本内容，优雅的生成数据分析结果。  
            """;




    public static SystemPromptTemplate  systemPromptTemplate(){
     return new SystemPromptTemplate(CHAT_SYSTEM_PROMPT);
    }


    public static PromptTemplate  compressionQueryTransformerPromptTemplate(){
        return new PromptTemplate(CHAT_CompressionQueryTransformer_PROMPT);
    }

    public static PromptTemplate  rewriteQueryTransformerPromptTemplate(){
        return new PromptTemplate(CHAT_RewriteQueryTransformer_PROMPT);
    }

    public static PromptTemplate  translationQueryTransformerPromptTemplate(){
        return new PromptTemplate(CHAT_TranslationQueryTransformer_PROMPT);
    }

    public static PromptTemplate  multiQueryExpanderPromptTemplate(){
        return new PromptTemplate(CHAT_MultiQueryExpander_PROMPT);
    }


    public static PromptTemplate  englishStudyAssistantPromptTemplate(){
        return new PromptTemplate(CHAT_English_Study_Assistant_PROMPT);
    }

    public static PromptTemplate  HotKeyPromptTemplate(){
        return new PromptTemplate(CHAT_HOTKEY_PROMPT);
    }


    public static PromptTemplate  liJiePromptTemplate(){
        return new PromptTemplate(LI_JIE_PROMPT);
    }
}
